Vuex 模块化
如果不能确定项目后期是否会迭代等,最好把
Vuex 模块化例子
- 创建 store
// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import user from './module/user'
import getters from './getters'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {},
mutations: {},
modules:{
user
},
getters
})
export default store
- getters
// store/getters.js
const getters = {
token: state => state.user.token
}
export default getters
// store/module/user.js
const Token = 'token'
export default {
namespaced: true, // 设置为带命名空间的模块
state: {
token: sessionStorage.getItem(Token)
},
getters: {},
mutations: {
setToken(state, token) {
state.token = token
sessionStorage.setItem(Token)
}
},
actions: {
login({
commit,
rootState
}){
// 因为设置为带命名空间的模块,所以引用需要带着命名空间名
// 自行选择是否配置 Promise
if(!rootState.user.token){
commit('setToken', '模拟Token')
}
}
}
};
- 在main.js内引入
import Vue from 'vue'
import App from './App'
import store from './store'
Vue.prototype.$store = store
new Vue({
el: '#app',
store,
render: h => h(App)
})
- store 使用
// Vue 页面内使用
this.$store.dispatch('user/login')
// router 内使用
import store from '@/store/index.js'
store.dispatch('user/login')
- Vue 页面内引用 store 内的参数
<template>
<div>
{{token}}
</div>
</template>
<script>
import {
mapState
} from 'vuex'
export default {
computed: mapState('user', ['token'])
}
</script>
Powered by Waline v2.15.8